package com.num.graph;
import java.util.Date;
import org.achartengine.ChartFactory;
import org.achartengine.GraphicalView;
import org.achartengine.chart.PointStyle;
import org.achartengine.chart.BarChart.Type;
import org.achartengine.model.CategorySeries;
import org.achartengine.model.TimeSeries;
import org.achartengine.model.XYMultipleSeriesDataset;
import org.achartengine.model.XYSeries;
import org.achartengine.renderer.SimpleSeriesRenderer;
import org.achartengine.renderer.XYMultipleSeriesRenderer;
import org.achartengine.renderer.XYSeriesRenderer;
import android.content.Context;
import android.graphics.Color;
import android.graphics.Typeface;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup.LayoutParams;
import android.widget.LinearLayout;
import com.num.R;
import com.num.Values;
import com.num.database.DatabasePicker;
import com.num.models.GraphData;
import com.num.models.GraphPoint;
public abstract class CopyOfChartView extends LinearLayout implements OnClickListener{
Values values;
DatabasePicker picker;
Context context;
private LayoutInflater mInflater;
private LinearLayout mBarView;
private XYMultipleSeriesDataset dataset;
private XYMultipleSeriesRenderer renderer;
private XYSeriesRenderer mCurrentRenderer;
private GraphicalView mChartView;
private int index = 0;
private GraphData data;
private String chartType="area";
private TimeSeries timeseries;
private SimpleSeriesRenderer simpleSeriesRenderer;
private CategorySeries categorySeries;
XYSeries xyseries;
public CopyOfChartView(Context _context, AttributeSet _attrs) {
super(_context, _attrs);
context = _context;
mInflater = (LayoutInflater) _context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
mBarView = (LinearLayout) mInflater.inflate(R.layout.cell_view_graph, null);
addView(mBarView);
}
public void onClick(View arg0) {
// TODO Auto-generated method stub
}
public void setChartType(String type) {
this.chartType = type;
}
public void setPicker(DatabasePicker picker) {
this.picker = picker;
setChartType(picker.getChartType());
}
private void constructAreaChart() {
renderer = new XYMultipleSeriesRenderer();
timeseries = new TimeSeries("");
timeseries.add(new Date().getDate(),0);
dataset = new XYMultipleSeriesDataset();
dataset.addSeries(timeseries);
XYSeriesRenderer seriesrenderer = new XYSeriesRenderer();
renderer.addSeriesRenderer(seriesrenderer);
setColors();
seriesrenderer.setPointStyle(PointStyle.CIRCLE);
seriesrenderer.setFillPoints(true);
seriesrenderer.setChartValuesSpacing(2);
seriesrenderer.setFillBelowLine(true);
seriesrenderer.setColor(getResources().getColor(R.color.light_blue));
seriesrenderer.setFillBelowLineColor(getResources().getColor(R.color.mid_blue));
seriesrenderer.setLineWidth(2);
//mChartView = ChartFactory.getCubeLineChartView(context, dataset, renderer, 0);
mChartView = ChartFactory.getTimeChartView(context, dataset, renderer,"MM/dd HH:00");
}
private void constructBarChart() {
renderer = new XYMultipleSeriesRenderer();
setColors();
SimpleSeriesRenderer simpleSeriesRenderer = new SimpleSeriesRenderer();
simpleSeriesRenderer.setColor(getResources().getColor(R.color.mid_blue));
renderer.addSeriesRenderer(simpleSeriesRenderer);
dataset = new XYMultipleSeriesDataset();
xyseries = new XYSeries("");
renderer.setYLabels(4);
renderer.setXLabels(0);
renderer.setBarSpacing(0.15);
//renderer.setShowLabels(false);
renderer.setAxisTitleTextSize(16);
renderer.setChartTitleTextSize(20);
renderer.setLabelsTextSize(20);
dataset.addSeries(xyseries);
//simpleSeriesRenderer.setDisplayChartValues(true);
mChartView = ChartFactory.getBarChartView(context, dataset, renderer,Type.DEFAULT);
}
public void constructGraph() {
if(chartType.equals("area")) {
constructAreaChart();
} else if(chartType.equals("bar")) {
constructBarChart();
}
makeUnClickable();
mBarView.addView(mChartView, new LayoutParams(LayoutParams.FILL_PARENT,
250));
mChartView.repaint();
}
public void updateGraph() {
data = picker.getGraphDataWithoutOutliers();
renderer.setYAxisMax(data.getyMax()*1.2);
renderer.setChartTitle(data.getxAxisTitle());
if(chartType.equals("area")) {
timeseries.clear();
for(GraphPoint point : data.getPoints()) {
timeseries.add(point.datetime, point.y);
}
} else if(chartType.equals("bar")) {
renderer.clearXTextLabels();
xyseries.clear();
for(GraphPoint point : data.getPoints()) {
xyseries.add(point.x, point.y);
renderer.addXTextLabel(point.x, point.string);
}
xyseries.add(data.getPoints().size(),0);
xyseries.add(-1, 0);
}
mChartView.repaint();
}
private void makeUnClickable() {
renderer.setPanEnabled(false,false);
renderer.setZoomEnabled(false, false);
renderer.setClickEnabled(false);
renderer.setShowGridX(true);
renderer.setInScroll(true);
renderer.setShowLegend(false);
}
private void setColors() {
renderer.setMargins(new int[] {0, 25, -10, 0});
renderer.setYAxisMax(0);
renderer.setYAxisMin(0.0);
renderer.setLabelsTextSize(14);
renderer.setPointSize(0);
renderer.setApplyBackgroundColor(true);
renderer.setBackgroundColor(getResources().getColor(R.color.black));
renderer.setMarginsColor(getResources().getColor(R.color.black));
renderer.setGridColor(getResources().getColor(R.color.dark_blue));
renderer.setAxesColor(getResources().getColor(R.color.dark_blue));
renderer.setChartTitleTextSize(20);
renderer.setTextTypeface("Bold", Typeface.NORMAL);
renderer.setSelectableBuffer(100);
}
}